/**
 * 
 */
package eMdP.classesBasiques;

import com.jme.bounding.BoundingBox;
import com.jme.math.FastMath;
import com.jme.math.Vector3f;
import com.jme.scene.Node;
import com.jme.scene.Spatial;
import com.jme.util.resource.ResourceLocatorTool;
import com.jme.util.resource.SimpleResourceLocator;
import com.jmex.physics.StaticPhysicsNode;

import eMdP.gestors.GestorConstants;
import eMdP.gestors.GestorModels;

/**
 * @author Peppino Coorp.
 *
 */
public class Bustia extends Node {
	private static final long serialVersionUID = 1L;
	//private static final Logger logger = Logger.getLogger(Partida.class.getName());
	
	private String nom;
	private Spatial model;
	private int color;
	private String animacioAcceptar;
	private String animacioRebutjar;
	
	private StaticPhysicsNode nodeEstatic;
	
	/**
	 * @param nom El nom que volem assignar a la bústia
	 * @param model Direcció de on es troba el model, per tal de poder-lo carregar
	 * @param color Enter que ens indica de quin color és la Bústia
	 * @param nodeEstatic El node estatic per controlar les físiques
	 */
	public Bustia(String nom, String model, int color,StaticPhysicsNode nodeEstatic){
		super(nom);
		setNom(nom);
		setColor(color);
		setNodeEstatic(nodeEstatic);
		this.nodeEstatic.setName("nodeEstatic"+nom);
		Node b;
		String direccio="";
		// Escollim quina textura de la bústia carregarem, segons el color que té
		try{
			switch (color) {
			case 0:
				direccio=GestorConstants.RESOURCE_BUSTIA_VERMELLA;break;
			case 1:
				direccio=GestorConstants.RESOURCE_BUSTIA_LILA;break;
			case 2:
				direccio=GestorConstants.RESOURCE_BUSTIA_VERDA;break;
			case 3:
				direccio=GestorConstants.RESOURCE_BUSTIA_GROGA;break;
			default:
				direccio=GestorConstants.RESOURCE_BUSTIA_GROGA;break;
				
			}
		ResourceLocatorTool.addResourceLocator(ResourceLocatorTool.TYPE_TEXTURE,
                new SimpleResourceLocator(GestorModels.class.getClassLoader().getResource(direccio)));
		}catch(Exception e){}

		if(model.endsWith(".3ds"))
			b = GestorModels.get3DS(model);
		else if(model.endsWith("-jme.xml"))
			b = GestorModels.getJMEXML(model);
		else{
			b = new Node();
			System.out.println("Bustia::Error al nom del Model de la bústia!");
		}
		b.setLocalScale(0.5f);
       // b.setModelBound(new BoundingBox());
        //b.updateModelBound();
		setModel(b);
		
		//Girem la bústia perquè miri cap als personatges
		//this.getLocalRotation().fromAngleAxis(FastMath.PI, new Vector3f(0,1,0));
		this.getLocalRotation().fromAngles(0, FastMath.HALF_PI, 0);
		//this.setLocalScale(10);
		this.nodeEstatic.generatePhysicsGeometry(true);
    	this.attachChild(this.nodeEstatic);
	}
	
	/**
	 * @param id L'id que volem assignar a la bústia
	 * @param model L'Spatial que conté el model de la Bústia
	 * @param color Enter que defineix el color que tindrà la Bústia
	 * @param animacioAcceptar Direcció a on es trobarà la animació que s'executa quan un paquet entra a la Bústia correcte
	 * @param animacioRebutjar Direcció a on es trobarà la animació que s'executa quan un paquet entra a la Bústia incorrecte
	 */
	public Bustia(String id, Spatial model, int color, String animacioAcceptar,
			String animacioRebutjar) {
		super(id);
		this.nom = id;
		
		
		setModel(model);
		this.color = color;
		this.animacioAcceptar = animacioAcceptar;
		this.animacioRebutjar = animacioRebutjar;
	}

	/**
	 * @return the id
	 */
	public String getNom() {
		return this.nom;
	}

	/**
	 * @param id the id to set
	 */
	public void setNom(String id) {
		this.nom = id;
	}

	/**
	 * @return the model
	 */
	public Spatial getModel() {
		return model;
	}

	/**
	 * @param model the model to set
	 */
	public void setModel(Spatial model) {
		//this.getNodeEstatic().detachChild(this.model);
	    this.model = model;
	    this.model.setModelBound(new BoundingBox());
		this.model.updateModelBound();
	    this.getNodeEstatic().attachChild(model);
	}

	/**
	 * @return the color
	 */
	public int getColor() {
		return color;
	}

	/**
	 * @param color the color to set
	 */
	public void setColor(int color) {
		this.color = color;
	}

	/**
	 * @return the animacioAcceptar
	 */
	public String getAnimacioAcceptar() {
		return animacioAcceptar;
	}

	/**
	 * @param animacioAcceptar the animacioAcceptar to set
	 */
	public void setAnimacioAcceptar(String animacioAcceptar) {
		this.animacioAcceptar = animacioAcceptar;
	}

	/**
	 * @return the animacioRebutjar
	 */
	public String getAnimacioRebutjar() {
		return animacioRebutjar;
	}

	/**
	 * @param animacioRebutjar the animacioRebutjar to set
	 */
	public void setAnimacioRebutjar(String animacioRebutjar) {
		this.animacioRebutjar = animacioRebutjar;
	}

	/**
	 * @return the nodeEstatic
	 */
	public StaticPhysicsNode getNodeEstatic() {
		return nodeEstatic;
	}

	/**
	 * @param nodeEstatic the nodeEstatic to set
	 */
	public void setNodeEstatic(StaticPhysicsNode nodeEstatic) {
		this.nodeEstatic = nodeEstatic;
	}

	/* -------------------------------------- Fi getters & Setters ---------------------------*/
	
	/*private Node carregarModel(String direccio){
			direccio = "eMdP/models/"+direccio;
	    	Node nodeBustia = new Node("bustia");
	    	
	    	URL modelToLoad = Bustia.class.getClassLoader().getResource(direccio);
			
	    	try {
	            MaxToJme C1 = new MaxToJme();
	            ByteArrayOutputStream BO = new ByteArrayOutputStream();
	            C1.convert(new BufferedInputStream(modelToLoad.openStream()), BO);
	            nodeBustia = (Node)BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray()));
	            
	            Quaternion temp = new Quaternion();
	            temp.fromAngleAxis(FastMath.PI / 2, new Vector3f(-1, 0, 0));
	            nodeBustia.setLocalRotation(temp);
	            logger.info("Bustia carregada amb Éxit");
	        } catch (IOException e) {
	            logger.log(Level.SEVERE, "Failed to load Max file", e);
	        }
	       
	        return nodeBustia;
	    
	}*/
	
	public void mirarAlCentre(){
		this.lookAt(new Vector3f(0,0,0), new Vector3f(0,1,0));
	}
}
